﻿using System.Web.Mvc;
using zeus.Core;
using SharpArch.Web.NHibernate;
using SharpArch.Core;
using SharpArch.Core.PersistenceSupport;
using System.Collections.Generic;
using Webdiyer.WebControls.Mvc;
using zeus.Core.RepositoryInterfaces;
using zeus.Web.Controllers.Helpers;
using System.Linq;
using System;

namespace zeus.Web.Controllers
{
    [HandleError]
    public class MapaController : Controller
    {
        #region constructor
        public WorkingSession workingSession
        {
            get
            {
                //if (Session["WorkingSession"] == null)
                //    throw new SessionExpiredException();
                return Session["WorkingSession"] as WorkingSession;
            }
            set
            {
                Session["WorkingSession"] = value;
            }
        }

        private readonly IUnidadRepository unidadRepository;
        private readonly IUbicacionRepository ubicacionRepository;
        private readonly IRepository<Comando> comandoRepository;
        private readonly IRepository<Cliente> clienteRepository;
        private readonly IUsuarioRepository usuarioRepository;
        private readonly IGrupoUsuarioRepository grupoUsuarioRepository;
        private readonly IEventoRepository eventosRepository;
        private readonly IPoligonoRepository poligonoRepository;

        public MapaController(IUbicacionRepository ubicacionRepository,
            IUnidadRepository unidadRepository,
            IRepository<Comando> comandoRepository,
            IRepository<Cliente> clienteRepository,
            IUsuarioRepository usuarioRepository,
            IGrupoUsuarioRepository grupoUsuarioRepository,
            IPoligonoRepository poligonoRepository,
            IEventoRepository eventosRepository)
        {
            Check.Require(grupoUsuarioRepository != null, "grupoUsuarioRepository may not be null");
            this.grupoUsuarioRepository = grupoUsuarioRepository;

            Check.Require(ubicacionRepository != null, "ubicacionRepository may not be null");
            this.ubicacionRepository = ubicacionRepository;

            Check.Require(unidadRepository != null, "unidadRepository may not be null");
            this.unidadRepository = unidadRepository;

            Check.Require(comandoRepository != null, "comandoRepository may not be null");
            this.comandoRepository = comandoRepository;

            Check.Require(clienteRepository != null, "clienteRepository may not be null");
            this.clienteRepository = clienteRepository;

            Check.Require(usuarioRepository != null, "usuarioRepository may not be null");
            this.usuarioRepository = usuarioRepository;

            Check.Require(poligonoRepository != null, "poligonoRepository may not be null");
            this.poligonoRepository = poligonoRepository;

            Check.Require(eventosRepository != null, "eventosRepository may not be null");
            this.eventosRepository = eventosRepository;
        }
        #endregion

        [Transaction,Authorize]
        public ActionResult Index(int? id, int? clienteId, int? und, int? grupoId)
        {
            try
            {                                

               if (Session["WorkingSession"] == null)
                    throw new SessionExpiredException();

                IList<Cliente> clientes = clienteRepository.GetAll();
                ViewData["Clientes"] = new SelectList(clientes, "Id", "Nombre", clienteId);

                IList<Unidad> unidades = new List<Unidad>();
                IList<Grupo> grupos = new List<Grupo>();
                IList<Evento> eventos = new List<Evento>();



                if (usuarioRepository.IsInRole(User.Identity.Name, "admin"))
                {


                    unidades = unidadRepository.GetByCliente(clienteId ?? clientes[0].Id);
                    grupos = grupoUsuarioRepository.GetByCliente(clienteId ?? clientes[0].Id);
                    eventos = eventosRepository.GetNombreEventos();

                    ViewData["IsAdmin"] = true;
                }
                else
                {
                    unidades = unidadRepository.GetByUsuario(workingSession.Usuario.Id);
                    //grupos = grupoUsuarioRepository.GetByUsuario(workingSession.Usuario.Id);
                    grupos = grupoUsuarioRepository.GetByUsuario(workingSession.Usuario);
                    eventos = eventosRepository.GetNombreEventos();

                    ViewData["IsAdmin"] = false;
                }

                Check.Require(unidades.Count > 0, "No existen unidades asignadas");

                Dictionary<string, object> filtro = new Dictionary<string, object>();

                List<int> unidadesID = new List<int>();

                // Validar que exista la Unidad
                if (und != null && (bool)ViewData["IsAdmin"] == false && und != 0)
                {
                    unidades.ToList().ForEach(p => unidadesID.Add(p.Id));
                    Check.Require(unidadesID.Contains(und.Value), "No se puede proceder con el ID indicado");


                }


                ViewData["CodigoUnidad"] = new SelectList(unidades, "Id", "Nombre", und ?? 0);
                ViewData["Grupos"] = new SelectList(grupos, "Id", "Nombre", grupoId ?? 0);
                

                return View();
            }
            catch (PreconditionException ex)
            {
                TempData["ErrorMessage"] = ex.Message;
                return RedirectToAction("Error", "Shared");
            }
            catch (SessionExpiredException)
            {
                TempData["ErrorMessage"] = "Sesión Expirada!";
                TempData["Expire"] = true;
                return RedirectToAction("Error", "Shared");
            }
            catch (Exception ex)
            {
                TempData["ErrorMessage"] = ex.Message;
                return RedirectToAction("Error", "Shared");
            }
        }

        [Transaction, HttpPost]
        public ActionResult index()
        {

            int id;

            id = workingSession.Usuario.Id;
            

            List<Posicion> posiciones = new List<Posicion>();
            IList<Ubicacion> ubic = ubicacionRepository.getUbicacionesPorUsuarioId(id);

            foreach (var item in ubic)
            {
                Posicion pos = new Posicion()
                {
                    Latitud = item.Latitud,
                    Longitud = item.Longitud,
                    NombreUnidad = item.Unidad.Nombre,
                    PlacaUnidad = item.Unidad.Placa,
                    Fecha = item.Fecha,
                    Velocidad = item.Velocidad,
                    Grados = item.Grados,
                    Evento = item.CodigoEvento,
                    EventoNombre = item.Evento.Nombre



                };

                posiciones.Add(pos);
            }

            return Json(posiciones);
            //return View();

        }

        [Transaction]
        public ActionResult BusquedaPorPosicion()
        {

            return View();
        }

        [Transaction]
        public ActionResult BusquedaAvanzada(int? id, int? clienteId, int? und)
        {

            try
            {
                IList<Cliente> clientes = clienteRepository.GetAll();
                ViewData["Clientes"] = new SelectList(clientes, "Id", "Nombre", clienteId);

                IList<Unidad> unidades = new List<Unidad>();

                if (usuarioRepository.IsInRole(User.Identity.Name, "admin"))
                {
                    unidades = unidadRepository.GetByCliente(clienteId ?? clientes[0].Id);
                    ViewData["IsAdmin"] = true;
                }
                else
                {
                    unidades = unidadRepository.GetByUsuario(workingSession.Usuario.Id);
                    ViewData["IsAdmin"] = false;
                }

                Check.Require(unidades.Count > 0, "No existen unidades asignadas");

                Dictionary<string, object> filtro = new Dictionary<string, object>();

                List<int> unidadesID = new List<int>();

                // Validar que exista la Unidad
                if (und != null && (bool)ViewData["IsAdmin"] == false)
                {
                    unidades.ToList().ForEach(p => unidadesID.Add(p.Id));
                    Check.Require(unidadesID.Contains(und.Value), "No se puede proceder con el ID indicado");
                }

                ViewData["comboUnidades"] = new SelectList(unidades, "Id", "Nombre", und ?? 0);


                //IList<Ubicacion> ubic = ubicacionRepository.GetUbicaciones(und ?? unidades[0].Id);
                //PagedList<Ubicacion> ubicaciones = new PagedList<Ubicacion>(ubic, id ?? 1, 10);
                //return View(ubicaciones);

                //IList<Ubicacion> ubic = new List<Ubicacion>();
                //ubic = ubicacionRepository.GetAll();
                //PagedList<Ubicacion> ubicaciones = new PagedList<Ubicacion>(ubic, id ?? 1, 10);
                //return View(ubicaciones);
                return View();


            }
            catch (PreconditionException ex)
            {
                TempData["ErrorMessage"] = ex.Message;
                return RedirectToAction("Error", "Shared");
            }
            catch (SessionExpiredException)
            {
                TempData["ErrorMessage"] = "Sesión Expirada!";
                TempData["Expire"] = true;
                return RedirectToAction("Error", "Shared");
            }
            catch (Exception ex)
            {
                TempData["ErrorMessage"] = ex.Message;
                return RedirectToAction("Error", "Shared");
            }
            
            
            
            //IList<Unidad> unidades = unidadRepository.GetAll();
            //ViewData["comboUnidades"] = new SelectList(unidades, "Id", "Nombre");
                        
            //IList<Ubicacion> ubic = new List<Ubicacion>();
            //ubic = ubicacionRepository.GetAll();
            //PagedList<Ubicacion> ubicaciones = new PagedList<Ubicacion>(ubic, id ?? 1, 10);
            //return View(ubicaciones);
           // return View();
        }

        [Transaction]
        public ActionResult MonitoreoMapa()
        {

            return View();
        }

        [Transaction]
        public ActionResult MonitoreoNave()
        {

            return View();
        }
        [Transaction]
        public ActionResult CarroMapa()
        {

            return View();
        }

        [HttpPost, Transaction]
        public ActionResult GetLatLong(int? id)
        {

           // Comando comand = new Comando();
            //comand.Id = 1;
            //comand.CodigoUnidad = id;
            //comand.CodigoEvento = 8;
            //comandoRepository.SaveOrUpdate(comand);
            

            //Ubicacion ubicacion = ubicacionRepository.GetUltimaPosicion(id);
            //List<object> coordenadas = new List<object> { ubicacion.Latitud, ubicacion.Longitud, 
            //    ubicacion.Fecha, ubicacion.Unidad.Nombre, ubicacion.Unidad.Placa, ubicacion.Velocidad, ubicacion.Grados,ubicacion.CodigoEvento,ubicacion.Evento.Nombre };
            ////object toda una lista del objeto ubicacion....selecciono los datos q dese y no todo el objeto 
            //return Json(coordenadas);

            if (id != null)
            {

                List<Posicion> posiciones = new List<Posicion>();
                IList<Ubicacion> ubic = ubicacionRepository.GetUltimaPosicion(id ?? 1);

                foreach (var item in ubic)
                {
                    Posicion pos = new Posicion()
                    {
                        Latitud = item.Latitud,
                        Longitud = item.Longitud,
                        NombreUnidad = item.Unidad.Nombre,
                        PlacaUnidad = item.Unidad.Placa,
                        Fecha = item.Fecha,
                        Velocidad = item.Velocidad,
                        Grados = item.Grados,
                        Evento = item.CodigoEvento,
                        EventoNombre = item.Evento.Nombre



                    };

                    posiciones.Add(pos);
                }

                return Json(posiciones);

            }
            else
            {
                List<Posicion> posiciones = new List<Posicion>();
                IList<Ubicacion> ubic = ubicacionRepository.getUbicacionesPorUsuarioId(workingSession.Usuario.Id);

                foreach (var item in ubic)
                {
                    Posicion pos = new Posicion()
                    {
                        Latitud = item.Latitud,
                        Longitud = item.Longitud,
                        NombreUnidad = item.Unidad.Nombre,
                        PlacaUnidad = item.Unidad.Placa,
                        Fecha = item.Fecha,
                        Velocidad = item.Velocidad,
                        Grados = item.Grados,
                        Evento = item.CodigoEvento,
                        EventoNombre = item.Evento.Nombre



                    };

                    posiciones.Add(pos);
                }

                return Json(posiciones);
            }
        }

        [HttpPost, Transaction]
        public ActionResult GetLatLongGrupos(int ? codigoGrupo)
        {

            if (codigoGrupo != null)
            {

                List<Posicion> posiciones = new List<Posicion>();
                IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoMapa(codigoGrupo ?? 1);

                foreach (var item in ubic)
                {
                    Posicion pos = new Posicion()
                    {
                        Latitud = item.Latitud,
                        Longitud = item.Longitud,
                        NombreUnidad = item.Unidad.Nombre,
                        PlacaUnidad = item.Unidad.Placa,
                        Fecha = item.Fecha,
                        Velocidad = item.Velocidad,
                        Grados = item.Grados,
                        Evento = item.CodigoEvento,
                        EventoNombre = item.Evento.Nombre



                    };

                    posiciones.Add(pos);
                }

                return Json(posiciones);

            }

            else 
            {

                List<Posicion> posiciones = new List<Posicion>();
                IList<Ubicacion> ubic = ubicacionRepository.getUbicacionesPorGrupoClienteUsuario(workingSession.Usuario.Id);

                foreach (var item in ubic)
                {
                    Posicion pos = new Posicion()
                    {
                        Latitud = item.Latitud,
                        Longitud = item.Longitud,
                        NombreUnidad = item.Unidad.Nombre,
                        PlacaUnidad = item.Unidad.Placa,
                        Fecha = item.Fecha,
                        Velocidad = item.Velocidad,
                        Grados = item.Grados,
                        Evento = item.CodigoEvento,
                        EventoNombre = item.Evento.Nombre



                    };

                    posiciones.Add(pos);
                }

                return Json(posiciones);
            
            }
            
        }

        [Transaction]
        public ActionResult Reportes(int id, string fecha_desde, string fecha_hasta)
        {
            IList<Ubicacion> ubic = new List<Ubicacion>();
            //ubic = ubicacionRepository.GetReportesAvanzada(id, fecha_desde, fecha_hasta);
            ubic = ubicacionRepository.GetReportesAvanzada(id, fecha_desde, fecha_hasta);
            PagedList<Ubicacion> ubicaciones = new PagedList<Ubicacion>(ubic, 1, 150);
            return View("Reportes", ubicaciones);

        }

        [HttpPost, Transaction]
        public ActionResult ReportesMapa(int id, string fecha_desde, string fecha_hasta)
        {

            List<Posicion> posiciones = new List<Posicion>();
            IList<Ubicacion> ubic = ubicacionRepository.GetReportesAvanzada(id, fecha_desde, fecha_hasta);

            foreach (var item in ubic)
            {
                Posicion pos = new Posicion()
                {
                    Latitud = item.Latitud,
                    Longitud = item.Longitud,
                    NombreUnidad = item.Unidad.Nombre,
                    PlacaUnidad = item.Unidad.Placa,
                    Fecha = item.FechaServer,
                    Velocidad = item.Velocidad,
                    Grados = item.Grados,
                    Evento=item.CodigoEvento,
                    EventoNombre=item.Evento.Nombre



                };

                posiciones.Add(pos);
            }

            return Json(posiciones);

        }

        public ActionResult Test()
        {
            return View();
        }

        public ActionResult Test2()
        {
            return View();
        }

        [Transaction]
        public ActionResult Startelmaps()
        {
            return View();
        }
        [Transaction]
        public ActionResult Mapa(int id)
        {

            List<object> datos = new List<object> { id };
            //object toda una lista del objeto ubicacion...selecciono los datos q dese y no todo el objeto 
            

            return View(datos);

            //id = 63;
            //Poligono poligono = poligonoRepository.Get(id);
            //Check.Require(poligono != null, "No se pudo recuperar el poligono");

            //return View(poligono);
        }

        [Transaction,  HttpPost]
        public ActionResult RetrievePoints(int id)
        {
            try
            {
                id = 63;
                Poligono poligono = poligonoRepository.Get(id);
                Check.Require(poligono != null, "No se pudo recuperar el poligono");

                List<Posicion> posiciones = new List<Posicion>();

                poligono.Detalles.ToList().ForEach(p => posiciones.Add(new Posicion()
                {
                    Latitud = p.Latitud,
                    Longitud = p.Longitud,
                    Zoom = poligono.Zoom,
                    LatCenter = poligono.LatCenter,
                    LngCenter = poligono.LngCenter
                }));

                return Json(posiciones);
            }
            catch (PreconditionException ex)
            {
                return Json(ex.Message);
            }
            catch (SessionExpiredException)
            {
                return Json("La sesión ha caducado");
            }
            catch (Exception ex)
            {
                return Json(ex.Message);
            }
        }

        [Transaction,HttpPost]
        public ActionResult MapaUbicacion(string Id)
        {

            Ubicacion ubicacion = ubicacionRepository.GetPosicionPorId(Id);
            List<object> coordenadas = new List<object> { ubicacion.Latitud, ubicacion.Longitud, 
                ubicacion.Fecha, ubicacion.Unidad.Nombre, ubicacion.Unidad.Placa, ubicacion.Velocidad, ubicacion.Grados,ubicacion.CodigoEvento,ubicacion.Evento.Nombre };
            //object toda una lista del objeto ubicacion....selecciono los datos q dese y no todo el objeto 
            return Json(coordenadas);
            

        }

       


        [Transaction,HttpPost]
        public ActionResult ListaMapa(int? id, int? clienteId, int? und, int? grupoId, int? ban, int? eventoId, int? ban1, int? gpsId, int? batPri, int? batAlt, int? estadoLogico, int? menu)
        {

            try
            {
                IList<Cliente> clientes = clienteRepository.GetAll();
                ////ViewData["Clientes"] = new SelectList(clientes, "Id", "Nombre", clienteId);

                IList<Unidad> unidades = new List<Unidad>();
                IList<Grupo> grupos = new List<Grupo>();
                IList<Evento> eventos = new List<Evento>();


                //if (usuarioRepository.IsInRole(User.Identity.Name, "admin"))
                //{
                unidades = unidadRepository.GetByCliente(clienteId ?? clientes[0].Id);
                grupos = grupoUsuarioRepository.GetByCliente(clienteId ?? clientes[0].Id);
                eventos = eventosRepository.GetNombreEventos();

                //    ViewData["IsAdmin"] = true;
                //}
                //else
                //{
                //    unidades = unidadRepository.GetByUsuario(workingSession.Usuario.Id);
                //    grupos = grupoUsuarioRepository.GetByUsuario(workingSession.Usuario);
                //    eventos = eventosRepository.GetNombreEventos();

                //    ViewData["IsAdmin"] = false;
                //}

                //Check.Require(unidades.Count > 0, "No existen unidades asignadas");

                //Dictionary<string, object> filtro = new Dictionary<string, object>();

                //List<int> unidadesID = new List<int>();

                //// Validar que exista la Unidad
                //if (und != null && (bool)ViewData["IsAdmin"] == false && und != 0)
                //{
                //    unidades.ToList().ForEach(p => unidadesID.Add(p.Id));
                //    Check.Require(unidadesID.Contains(und.Value), "No se puede proceder con el ID indicado");
                //}

                ////ViewData["CodigoUnidad"] = new SelectList(unidades, "Id", "Nombre", und ?? 0);
                ////ViewData["Grupos"] = new SelectList(grupos, "Id", "Nombre", grupoId ?? 0);
                ////ViewData["EventosUnidad"] = new SelectList(eventos, "Id", "Nombre", eventoId ?? 0);



                ////IList<Ubicacion> ubic = ubicacionRepository.GetUbicaciones(und ?? unidades[0].Id);
                ////PagedList<Ubicacion> ubicaciones = new PagedList<Ubicacion>(ubic, id ?? 1, 10);
                ////return View(ubicaciones);

              

                if (und != null && batAlt != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUnidadBateriaAlterna(und ?? unidades[0].Id, batAlt ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }

                if (grupoId != null && batAlt != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoBateriaAlterna(grupoId ?? grupos[0].Id, batAlt ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }

                if (und != null && batPri != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUnidadBateriaPrinciapl(und ?? unidades[0].Id, batPri ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }

                if (grupoId != null && batPri != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoBateriaPrinciapl(grupoId ?? grupos[0].Id, batPri ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }

                if (und != null && gpsId != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUnidadGpsValid(und ?? unidades[0].Id, gpsId ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }

                if (grupoId != null && gpsId != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoGpsValid(grupoId ?? grupos[0].Id, gpsId ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }

                if (clienteId != null && ban1 == 0 && gpsId != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGpsPorCliente(gpsId ?? 1, clienteId ?? clientes[0].Id);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }
                else if (clienteId == null && ban1 == 0 && gpsId != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUsuarioGps(workingSession.Usuario.Id, gpsId ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }


                if (clienteId != null && ban1 == 0 && batPri != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorClienteBateriaPrinciapl(clienteId ?? clientes[0].Id, batPri ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }
                else if (clienteId == null && ban1 == 0 && batPri != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUsuarioBateriaPrinciapl(workingSession.Usuario.Id, batPri ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }


                if (clienteId != null && ban1 == 0 && batAlt != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorClienteBateriaAlterna(clienteId ?? clientes[0].Id, batAlt ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }
                else if (clienteId == null && ban1 == 0 && batAlt != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUsuarioBateriaAlterna(workingSession.Usuario.Id, batAlt ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }


                if (clienteId != null && ban1 == 0 && estadoLogico != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorClienteEstadoLogico(clienteId ?? clientes[0].Id, estadoLogico ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }
                else if (clienteId == null && ban1 == 0 && estadoLogico != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUsuarioEstadoLogico(workingSession.Usuario.Id, estadoLogico ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }



                if (clienteId != null && ban1 == 1 && gpsId != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoClienteGps(clienteId ?? clientes[0].Id, gpsId ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }
                else if (clienteId == null && ban1 == 1 && gpsId != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoUsuarioGps(workingSession.Usuario.Id, gpsId ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }


                if (clienteId != null && ban1 == 1 && batPri != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoClienteBateriaPrinciapl(clienteId ?? clientes[0].Id, batPri ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }
                else if (clienteId == null && ban1 == 1 && batPri != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoUsuarioBateriaPrinciapl(workingSession.Usuario.Id, batPri ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }

                if (clienteId != null && ban1 == 1 && batAlt != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoClienteBateriaAlterna(clienteId ?? clientes[0].Id, batAlt ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }
                else if (clienteId == null && ban1 == 1 && batAlt != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoUsuarioBateriaAlterna(workingSession.Usuario.Id, batAlt ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }


                if (clienteId != null && ban1 == 1 && estadoLogico != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGruporClienteEstadoLogico(clienteId ?? clientes[0].Id, estadoLogico ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }
                else if (clienteId == null && ban1 == 1 && estadoLogico != null)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGruporUsuarioEstadoLogico(workingSession.Usuario.Id, estadoLogico ?? 1);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }


                if (eventoId != null)
                {

                    if (und != null)
                    {
                        List<Posicion> posiciones = new List<Posicion>();
                        IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorEventoPorUnidad(eventoId ?? eventos[0].Id, und ?? unidades[0].Id);
                        foreach (var item in ubic)
                        {
                            Posicion pos = new Posicion()
                            {
                                Latitud = item.Latitud,
                                Longitud = item.Longitud,
                                NombreUnidad = item.Unidad.Nombre,
                                PlacaUnidad = item.Unidad.Placa,
                                Fecha = item.FechaServer,
                                Velocidad = item.Velocidad,
                                Grados = item.Grados,
                                Evento = item.CodigoEvento,
                                EventoNombre = item.Evento.Nombre

                            };

                            posiciones.Add(pos);
                        }

                        return Json(posiciones);
                    }

                    if (grupoId != null)
                    {

                        List<Posicion> posiciones = new List<Posicion>();
                        IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorEventoPorGrupo(eventoId ?? eventos[0].Id, grupoId ?? grupos[0].Id);
                        foreach (var item in ubic)
                        {
                            Posicion pos = new Posicion()
                            {
                                Latitud = item.Latitud,
                                Longitud = item.Longitud,
                                NombreUnidad = item.Unidad.Nombre,
                                PlacaUnidad = item.Unidad.Placa,
                                Fecha = item.FechaServer,
                                Velocidad = item.Velocidad,
                                Grados = item.Grados,
                                Evento = item.CodigoEvento,
                                EventoNombre = item.Evento.Nombre

                            };

                            posiciones.Add(pos);
                        }

                        return Json(posiciones);
                    }

                    if (clienteId != null && ban1 == 0)
                    {
                        List<Posicion> posiciones = new List<Posicion>();
                        IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorEventoPorCliente(eventoId ?? eventos[0].Id, clienteId ?? clientes[0].Id);
                        foreach (var item in ubic)
                        {
                            Posicion pos = new Posicion()
                            {
                                Latitud = item.Latitud,
                                Longitud = item.Longitud,
                                NombreUnidad = item.Unidad.Nombre,
                                PlacaUnidad = item.Unidad.Placa,
                                Fecha = item.FechaServer,
                                Velocidad = item.Velocidad,
                                Grados = item.Grados,
                                Evento = item.CodigoEvento,
                                EventoNombre = item.Evento.Nombre

                            };

                            posiciones.Add(pos);
                        }

                        return Json(posiciones);
                    }
                    else if (clienteId == null && ban1 == 0)
                    {
                        List<Posicion> posiciones = new List<Posicion>();
                        IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUsuarioEvento(workingSession.Usuario.Id, eventoId ?? eventos[0].Id);
                        foreach (var item in ubic)
                        {
                            Posicion pos = new Posicion()
                            {
                                Latitud = item.Latitud,
                                Longitud = item.Longitud,
                                NombreUnidad = item.Unidad.Nombre,
                                PlacaUnidad = item.Unidad.Placa,
                                Fecha = item.FechaServer,
                                Velocidad = item.Velocidad,
                                Grados = item.Grados,
                                Evento = item.CodigoEvento,
                                EventoNombre = item.Evento.Nombre

                            };

                            posiciones.Add(pos);
                        }

                        return Json(posiciones);
                    }

                    if (clienteId != null && ban1 == 1)
                    {
                        List<Posicion> posiciones = new List<Posicion>();
                        IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoClienteEvento(clienteId ?? clientes[0].Id, eventoId ?? eventos[0].Id);
                        foreach (var item in ubic)
                        {
                            Posicion pos = new Posicion()
                            {
                                Latitud = item.Latitud,
                                Longitud = item.Longitud,
                                NombreUnidad = item.Unidad.Nombre,
                                PlacaUnidad = item.Unidad.Placa,
                                Fecha = item.FechaServer,
                                Velocidad = item.Velocidad,
                                Grados = item.Grados,
                                Evento = item.CodigoEvento,
                                EventoNombre = item.Evento.Nombre

                            };

                            posiciones.Add(pos);
                        }

                        return Json(posiciones);
                    }
                    else if (clienteId == null && ban1 == 1)
                    {
                        List<Posicion> posiciones = new List<Posicion>();
                        IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoUsuarioEvento(workingSession.Usuario.Id, eventoId ?? eventos[0].Id);
                        foreach (var item in ubic)
                        {
                            Posicion pos = new Posicion()
                            {
                                Latitud = item.Latitud,
                                Longitud = item.Longitud,
                                NombreUnidad = item.Unidad.Nombre,
                                PlacaUnidad = item.Unidad.Placa,
                                Fecha = item.FechaServer,
                                Velocidad = item.Velocidad,
                                Grados = item.Grados,
                                Evento = item.CodigoEvento,
                                EventoNombre = item.Evento.Nombre

                            };

                            posiciones.Add(pos);
                        }

                        return Json(posiciones);
                    }


                }


                if (und != null && ban1 == 2)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicaciones(und ?? unidades[0].Id);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }

                if (grupoId != null && ban1 == 2)
                {
                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupo(grupoId ?? grupos[0].Id);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);
                }


                if (grupoId != null)
                {


                    List<Posicion> posiciones = new List<Posicion>();
                    IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupo(grupoId ?? grupos[0].Id);
                    foreach (var item in ubic)
                    {
                        Posicion pos = new Posicion()
                        {
                            Latitud = item.Latitud,
                            Longitud = item.Longitud,
                            NombreUnidad = item.Unidad.Nombre,
                            PlacaUnidad = item.Unidad.Placa,
                            Fecha = item.FechaServer,
                            Velocidad = item.Velocidad,
                            Grados = item.Grados,
                            Evento = item.CodigoEvento,
                            EventoNombre = item.Evento.Nombre

                        };

                        posiciones.Add(pos);
                    }

                    return Json(posiciones);


                }
                else
                {

                    if (ban == 0)
                    {
                        if (clienteId != null)
                        {
                            List<Posicion> posiciones = new List<Posicion>();
                            IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoCliente(clienteId ?? 1);
                            foreach (var item in ubic)
                            {
                                Posicion pos = new Posicion()
                                {
                                    Latitud = item.Latitud,
                                    Longitud = item.Longitud,
                                    NombreUnidad = item.Unidad.Nombre,
                                    PlacaUnidad = item.Unidad.Placa,
                                    Fecha = item.FechaServer,
                                    Velocidad = item.Velocidad,
                                    Grados = item.Grados,
                                    Evento = item.CodigoEvento,
                                    EventoNombre = item.Evento.Nombre

                                };

                                posiciones.Add(pos);
                            }

                            return Json(posiciones);
                        }
                        else
                        {
                            List<Posicion> posiciones = new List<Posicion>();
                            IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorGrupoUsuario(workingSession.Usuario.Id);
                            foreach (var item in ubic)
                            {
                                Posicion pos = new Posicion()
                                {
                                    Latitud = item.Latitud,
                                    Longitud = item.Longitud,
                                    NombreUnidad = item.Unidad.Nombre,
                                    PlacaUnidad = item.Unidad.Placa,
                                    Fecha = item.FechaServer,
                                    Velocidad = item.Velocidad,
                                    Grados = item.Grados,
                                    Evento = item.CodigoEvento,
                                    EventoNombre = item.Evento.Nombre

                                };

                                posiciones.Add(pos);
                            }

                            return Json(posiciones);

                        }

                    }
                    if (und != 0)
                    {
                        //aki es la vuelta
                        //IList<Ubicacion> ubic = ubicacionRepository.GetUbicaciones(und ?? unidades[0].Id);
                        //PagedList<Ubicacion> ubicaciones = new PagedList<Ubicacion>(ubic, id ?? 1, 10);
                        //return View(ubic);

                        List<Posicion> posiciones = new List<Posicion>();
                        IList<Ubicacion> ubic = ubicacionRepository.GetUbicaciones(und ?? unidades[0].Id);
                        //PagedList<Ubicacion> ubicaciones = new PagedList<Ubicacion>(ubic, id ?? 1, 10);

                        foreach (var item in ubic)
                        {
                            Posicion pos = new Posicion()
                            {
                                Latitud = item.Latitud,
                                Longitud = item.Longitud,
                                NombreUnidad = item.Unidad.Nombre,
                                PlacaUnidad = item.Unidad.Placa,
                                Fecha = item.FechaServer,
                                Velocidad = item.Velocidad,
                                Grados = item.Grados,
                                Evento = item.CodigoEvento,
                                EventoNombre = item.Evento.Nombre

                            };

                            posiciones.Add(pos);
                        }

                        return Json(posiciones);

                    }

                    else
                    {

                        if (clienteId != null)
                        {
                            List<Posicion> posiciones = new List<Posicion>();
                            IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorCliente(clienteId ?? 1);
                            foreach (var item in ubic)
                            {
                                Posicion pos = new Posicion()
                                {
                                    Latitud = item.Latitud,
                                    Longitud = item.Longitud,
                                    NombreUnidad = item.Unidad.Nombre,
                                    PlacaUnidad = item.Unidad.Placa,
                                    Fecha = item.FechaServer,
                                    Velocidad = item.Velocidad,
                                    Grados = item.Grados,
                                    Evento = item.CodigoEvento,
                                    EventoNombre = item.Evento.Nombre

                                };

                                posiciones.Add(pos);
                            }

                            return Json(posiciones);
                        }
                        else
                        {
                            List<Posicion> posiciones = new List<Posicion>();
                            IList<Ubicacion> ubic = ubicacionRepository.GetUbicacionesPorUsuario(workingSession.Usuario.Id);
                            foreach (var item in ubic)
                            {
                                Posicion pos = new Posicion()
                                {
                                    Latitud = item.Latitud,
                                    Longitud = item.Longitud,
                                    NombreUnidad = item.Unidad.Nombre,
                                    PlacaUnidad = item.Unidad.Placa,
                                    Fecha = item.FechaServer,
                                    Velocidad = item.Velocidad,
                                    Grados = item.Grados,
                                    Evento = item.CodigoEvento,
                                    EventoNombre = item.Evento.Nombre

                                };

                                posiciones.Add(pos);
                            }

                            return Json(posiciones);


                        }


                    }

                }



            }
            catch (PreconditionException ex)
            {
                TempData["ErrorMessage"] = ex.Message;
                return RedirectToAction("Error", "Shared");
            }
            catch (SessionExpiredException)
            {
                TempData["ErrorMessage"] = "Sesión Expirada!";
                TempData["Expire"] = true;
                return RedirectToAction("Error", "Shared");
            }
            catch (Exception ex)
            {
                TempData["ErrorMessage"] = ex.Message;
                return RedirectToAction("Error", "Shared");
            }


            ////////////////////////////////////////




        }


        [Transaction]
        public ActionResult EarthMapa()
        {

            return View();
        
        }
    }
}
